const mysql = require("mysql"),
    mysqlServiceConfig = require(require("../filesPathConfigs").mysqlServiceConfigPath);

var query = function(sql,params,success,error){
    //每次使用的时候需要创建链接，数据操作完成之后要关闭连接
    var pool = mysql.createPool({
        host     : mysqlServiceConfig.host,
        user     : mysqlServiceConfig.user,
        password : mysqlServiceConfig.password,
        database : mysqlServiceConfig.database,
        port     : mysqlServiceConfig.port,
        connectionLimit: 10,
        multipleStatements: true //开启数据库多语句查询
    }); 
    pool.getConnection(function(err,connection){
        if(err){
            console.log('数据库链接失败');
            error && error(err);
            throw err;
        }

        //开始数据操作
        connection.query( {
            sql : sql, 
            timeout: 40000, // 40s
            values : params
        }, function(err,results,fields ){
            if(err){
                console.log('数据操作失败');
                error && error(err);
                throw err;
            }
            //将查询出来的数据返回给回调函数，这个时候就没有必要使用错误前置的思想了，因为我们在这个文件中已经对错误进行了处理，如果数据检索报错，直接就会阻塞到这个文件中
            success && success(results, fields);
            //results作为数据操作后的结果，fields作为数据库连接的一些字段，大家可以打印到控制台观察一下
                //停止链接数据库，必须再查询语句后，要不然一调用这个方法，就直接停止链接，数据操作就会失败
            connection.release();
            // connection.end(function(err){
            //     if(err){
            //             console.log('关闭数据库连接失败！');
            //             throw err;
            //     }
            // });
        });
   });
};

/*
* api_sql:登录账号部分
*/
// 注册用户 @param value Array
let insertUserSql = function( value ) {
    let _sql = `INSERT INTO users (username,password,user_regtime,create_date,update_date) VALUES(?,?,?,?,?)`;
    return query( _sql, value )
};
// 已注册用户查询 @param username String
let queryUserSql = function( username,success,error ){
    let _sql = `SELECT * FROM users WHERE username='${username}'`;
    return query(_sql,[],success,error);
}
// 获取用户列表 
let getUsersListSql = function(params,success,error) {
    let _sql = `SELECT * FROM users`;
    return query(_sql,params,success,error);
};



/*
* 导出接口
*/
module.exports={               /*  使用范围     sql名称              参数名称            参数类型      */
    insertUserSql,             //            注册用户            @param value           Array
    queryUserSql,              //            登录用户查询        @param username        String
    getUsersListSql,           //            获取用户列表 
};